package psrc.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import psrc.bd.util.ConnectionFactory;
import psrc.logic.util.beans.ClienteBean;
import psrc.logic.util.beans.FabricaBean;
import psrc.logic.util.beans.PagamentoComissao;
import psrc.logic.util.beans.PedidoBean;
import psrc.logic.util.beans.ProdutoBean;
import psrc.logic.util.beans.Romaneio;
import psrc.logic.util.beans.StatusPagamento;

public class ConsultaDadosPedidosDAO {

	private Connection connection;

	public ConsultaDadosPedidosDAO(Connection conn) {
		if (conn != null) {
			this.connection = conn;
		} else {
			this.connection = new ConnectionFactory().getConnection();
		}
	}

	public List<ProdutoBean> selectProdutos(int idPedido) throws SQLException {
		ArrayList<ProdutoBean> produtos = new ArrayList<ProdutoBean>();
		
		try {

			String sql = "SELECT prod.fk_pedido, prod.referencia, prod.materiais, prod.cor, prod.produto, prod.tamanho, prod.quantidade, prod.preco, prod.id_produto FROM Pedido p, Cliente c, Produto prod WHERE p.id_pedido=? AND p.fk_cliente = c.id_cliente AND p.id_pedido = prod.fk_pedido";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(1, idPedido);

			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				ProdutoBean bean = new ProdutoBean();
				bean.setFkPedido(rs.getString("fk_pedido"));
				bean.setReferencia(rs.getString("referencia"));
				bean.setMateriais(rs.getString("materiais"));
				bean.setCor(rs.getString("cor"));
				bean.setProduto(rs.getString("produto"));
				bean.setTamanho(rs.getString("tamanho"));
				bean.setQuantidade(rs.getString("quantidade"));
				bean.setPreco(rs.getDouble("preco"));
				bean.setIdProduto(rs.getString("id_produto"));

				produtos.add(bean);
			}
			rs.close();
			stmt.close();
			return produtos;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	public FabricaBean selectFabrica(int idPedido) throws SQLException {

		try {
			String sql = "SELECT f.id_fabrica, f.razao_social, f.nome_fantasia, f.logradouro, f.numero, f.complemento, f.bairro, f.cidade, f.estado, f.cep, f.cnpj, f.inscricao_estadual, f.telefone, f.email, f.pagamento_comissao, f.comissao_direto, f.comissao_preposto FROM Pedido p, Fabrica f WHERE p.id_pedido=? AND p.fk_fabrica = f.id_fabrica";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(1, idPedido);

			ResultSet rs = stmt.executeQuery();
			rs.next();
			
			FabricaBean bean = new FabricaBean();
			bean.setRazaoSocial(rs.getString("razao_social"));
			bean.setNomeFantasia(rs.getString("nome_fantasia"));
			bean.setLogradouro(rs.getString("logradouro"));
			bean.setNumero(rs.getString("numero"));
			bean.setComplemento(rs.getString("complemento"));
			bean.setBairro(rs.getString("bairro"));
			bean.setCidade(rs.getString("cidade"));
			bean.setEstado(rs.getString("estado"));
			bean.setCep(rs.getString("cep"));
			bean.setCnpj(rs.getString("cnpj"));
			bean.setInscricaoEstadual(rs.getString("inscricao_estadual"));
			bean.setTelefone(rs.getString("telefone"));
			bean.setEmail(rs.getString("email"));
			bean.setPagamentoComissao(PagamentoComissao.valueOf(rs.getString("pagamento_comissao")));
			bean.setComissaoDireto(rs.getString("comissao_direto"));
			bean.setComissaoPreposto(rs.getString("comissao_preposto"));
			bean.setIdFabrica(rs.getString("id_fabrica"));

			rs.close();
			stmt.close();
			return bean;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	public ClienteBean selectCliente(int idPedido) throws SQLException {

		try {
			String sql = "SELECT c.id_cliente, c.razao_social, c.nome_fantasia, c.logradouro, c.numero, c.complemento, c.bairro, c.cidade, c.estado, c.cep, c.cnpj, c.inscricao_estadual, c.telefone_1, c.telefone_2, c.email, c.comprador, c.fk_representante, c.fk_rede "
					+ "FROM Pedido p, Cliente c "
					+ "WHERE p.id_pedido=? AND p.fk_cliente = c.id_cliente";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(1, idPedido);

			ResultSet rs = stmt.executeQuery();
			rs.next();
			
			ClienteBean bean = new ClienteBean();
			bean.setRazaoSocial(rs.getString("razao_social"));
			bean.setNomeFantasia(rs.getString("nome_fantasia"));
			bean.setLogradouro(rs.getString("logradouro"));
			bean.setNumero(rs.getString("numero"));
			bean.setComplemento(rs.getString("complemento"));
			bean.setBairro(rs.getString("bairro"));
			bean.setCidade(rs.getString("cidade"));
			bean.setEstado(rs.getString("estado"));
			bean.setCep(rs.getString("cep"));
			bean.setCnpj(rs.getString("cnpj"));
			bean.setInscricaoEstadual(rs.getString("inscricao_estadual"));
			bean.setTelefone1(rs.getString("telefone_1"));
			bean.setTelefone2(rs.getString("telefone_2"));
			bean.setEmail(rs.getString("email"));
			bean.setComprador(rs.getString("comprador"));
			bean.setFkRepresentante(rs.getInt("fk_representante"));
			bean.setFkRede(rs.getInt("fk_rede"));
			bean.setIdCliente(rs.getString("id_cliente"));

			rs.close();
			stmt.close();
			return bean;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	public PedidoBean selectPedido(int idPedido) throws SQLException {

		try {
			String sql = "SELECT * FROM Pedido WHERE id_pedido=?";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(1, idPedido);

			ResultSet rs = stmt.executeQuery();
			rs.next();
			
			PedidoBean bean = new PedidoBean();
			bean.setFkCliente(rs.getInt("fk_cliente"));
			bean.setFkRepresentante(rs.getInt("fk_representante"));
			bean.setFkFabrica(rs.getInt("fk_fabrica"));
			bean.setDataPedido(rs.getDate("data_pedido"));
			bean.setDataEnvio(rs.getDate("data_envio"));
			bean.setDataConfirmacao(rs.getDate("data_confirmacao"));
			bean.setNumeroPedido(rs.getString("numero_pedido"));
			bean.setDataFaturamento(rs.getDate("data_faturamento"));
			bean.setDataLiquidacao(rs.getDate("data_liquidacao"));
			bean.setDataEntrega(rs.getDate("data_entrega"));
			bean.setStatusPagamento(StatusPagamento.valueOf(rs.getString("status_pagamento")));
			bean.setRomaneio(Romaneio.valueOf(rs.getString("romaneio")));
			bean.setObservacoes(rs.getString("observacoes"));
			bean.setIdPedido(rs.getInt("id_pedido"));

			rs.close();
			stmt.close();
			return bean;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
}
